package com.wqt;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import org.junit.Test;

/**
 * @ProjectName: ybxy6
 * @Titile: SteamDemo
 * @Author: wqt
 * @Description: TODO
 */
public class SteamDemo {
    public static void main(String[] args) {

        List<String> name = new ArrayList<>();
        name.add("张三");
        name.add("张三2");
        name.add("张三丰");
        name.add("张三丰2");
        name.add("张无忌");
        name.add("张无忌2");
        name.add("萧逸");
        name.add("萧逸2");
        name.add("赵六");
        name.add("赵六2");

        List<String> list1 = new ArrayList<>();
        name.forEach(str -> {
            if (str.startsWith("张")) {
                list1.add(str);
            }
        });

        List<String> list2 = new ArrayList<>();
        list1.forEach(str -> {
            if (str.length() == 3) {
                list2.add(str);
            }
        });

        list2.forEach(System.out::println);

        System.out.println("------------------------------------------------");

        //1.获取集合的流对象Steam对象
        //2.过滤
        //3.终结方法
        name.stream()
                .filter(str -> str.startsWith("张"))
                .filter(str -> str.length() == 3)
                .forEach(System.out::println);
    }


    @Test
        public void test1 () {
            List<String> list = new ArrayList<>();
            list.add("1");
            list.add("2");
            list.add("3");
            list.add("4");
            list.add("5");
            list.add("6");
            list.add("7");
            list.add("8");
            list.add("9");
            list.add("10");

      /*  List<Integer>list1 = list.stream()
                    .filter(integer->integer % 2==0)
                    .toList();
                    */
            List<Integer> list1 = list.stream()
                    .map(Integer::parseInt)
                    .filter(integer -> integer % 2 == 0)
                    .collect(Collectors.toList());

            System.out.println(list1);
        }

@Test
        public void test2 () {

            List<String> list = new ArrayList<>();
            list.add("zhangsan，23");
            list.add("lisi，24");
            list.add("wangwu，25");

            Map<Object, Object> map = list.stream().filter(s -> {
                String[] split = s.split("，");
                int age = Integer.parseInt(split[1]);
                return age > 23;
            }).collect(Collectors.toMap(s -> {
                String[] split = s.split("，");
                return split[0];
            }, s -> {
                String[] split = s.split("，");
                return split[1];
            }));
            map.forEach((k, v) ->
                    System.out.println(k + "---" + v));

        }

        @Test
        public void test3 () {
            List<String> list1 = new ArrayList<>();
            list1.add("成龙");
            list1.add("周星驰");
            list1.add("张学友");
            list1.add("周杰伦");
            list1.add("李健");
            list1.add("王力宏");

            List<String> list2 = new ArrayList<>();
            list2.add("高圆圆");
            list2.add("赵丽颖");
            list2.add("杨幂");
            list2.add("林志玲");
            list2.add("杨紫");

            Stream<String> stream1 = list1.stream()
                    .filter(new Predicate<String>() {
                        @Override
                        public boolean test(String s) {
                            return s.length() > 3;
                        }
                    })
                    .limit(2);

            Stream<String> stream2 = list2.stream()
                    .filter(new Predicate<String>() {
                        @Override
                        public boolean test(String s) {
                            return s.startsWith("杨");
                        }
                    })
                    .skip(1);

            Stream.concat(stream1, stream2).forEach(System.out::println);
        }
    }


